package com.xiaoyao.myframeapp.utils.db;

/**
 * @author xiaoyao
 * @mail xiao80206040@qq.com
 * @explain Created by Administrator on 2017/2/16 0016.通过DbManager这个类我们知道主要它做了以下几件事情:
 * 1.getDaoConfig 获取数据库的配置信息
 * 2.getDatabase 获取数据库实例
 * 3.saveBindingId saveOrUpdate save 插入数据的3个方法(保存数据)
 * 4.replace 只有存在唯一索引时才有用 慎重
 * 5.delete操作的4种方法(删除数据)
 * 6.update操作的2种方法(修改数据)
 * 7.find操作6种方法(查询数据)
 * 8.dropTable 删除表
 * 9.addColumn 添加一列
 * 10.dropDb 删除数据库
 */

import android.content.Context;
import android.content.SharedPreferences;

import com.xiaoyao.myframeapp.FrameApplication;
import com.xiaoyao.myframeapp.utils.L;
import com.xiaoyao.myframeapp.utils.SpUtils;

import org.xutils.DbManager;
import org.xutils.db.table.TableEntity;
import org.xutils.ex.DbException;

/**
 * 通过XUti.getDaoConfig()方法，我们能够获取到一个DaoConfig对象。通过getDaoConfig()方法，我们可以知道这个方法主要可以做以下事情:
 * 1.setDbName 设置数据库的名称
 * 2.setDbDir 设置数据库存放的路径
 * 3.setDbVersion 设置数据库的版本
 * 4.setAllowTransaction(true) 设置允许开启事务
 * 5.setDbUpgradeListener 设置一个版本升级的监听方法
 */
public class XUtilDb {

    private static SharedPreferences spf = FrameApplication.getmContext().getSharedPreferences("Woxing", Context.MODE_PRIVATE);
    private static SharedPreferences.Editor editor;

    private static DbManager.DaoConfig daoConfig;

    public static DbManager.DaoConfig getDaoConfig() {

//        String DbName = spf.getString("myid", "Woxing");
        // TODO 窝友号码 的数据库
        String DbName = SpUtils.get("uniqueToken", "Woxing").toString();

        if (daoConfig != null) {
            if (daoConfig.getDbName().equals("Woxing.db")) {
                daoConfig = null;
            } else if (!daoConfig.getDbName().equals(SpUtils.get("uniqueToken", "").toString() + ".db")) {
                daoConfig = null;
            }
        }
        L.e("XUtilDb", DbName);
        if (daoConfig == null) {
            daoConfig = new DbManager.DaoConfig()
                    .setDbName(DbName + ".db")
                    .setTableCreateListener(new DbManager.TableCreateListener() {
                        @Override
                        public void onTableCreated(DbManager db, TableEntity<?> table) {
                            L.i(getClass(), "创建表=" + table.getName());
                        }
                    })
//					.setDbDir(file)
                    .setDbVersion(1)
                    .setAllowTransaction(true)
                    .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                        @Override
                        public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                            //更新方法
                            try {
                                onUpgrade_DB(db, oldVersion, newVersion);
                            } catch (DbException e) {
                                e.printStackTrace();
                            }
                        }
                    })
                    .setDbOpenListener(
                            new DbManager.DbOpenListener() {
                                @Override
                                public void onDbOpened(DbManager db) {
                                    //开启数据库多线程
                                    db.getDatabase().enableWriteAheadLogging();
                                }
                            }
                    );
        }
        return daoConfig;
    }
    //TODO DbVersion 1 》》》 2.1.1
    //TODO DbVersion 2 》》》 2.2

    private static void onUpgrade_DB(DbManager db, int oldVersion, int newVersion) throws DbException {

        switch (oldVersion) {
            case 1:
//                db.dropDb();
                //为数据库表DraftsBean添加data字段
//                db.addColumn(DraftsBean.class, "data");
                L.e("1");
                break;
            case 2:
//                db.dropDb();
                db.dropTable(DbDatafromJson.class);
                db.save(new DbDatafromJson());
                L.e("2");
                break;
            case 3:
//                db.dropDb();
//                DbManager db2 = x.getDb(XUtilDb.getDaoConfig());
                L.e("3");
                break;
        }
        if ((oldVersion + 1) < newVersion) {
            oldVersion++;
            onUpgrade_DB(db, oldVersion, newVersion);
            L.e("while");
        }

    }
}